package org.example.controller;

import lombok.extern.slf4j.Slf4j;
import org.example.domain.User;
import org.example.service.UserService;
import org.example.utils.ResponseUtil.ResponseResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import static org.example.utils.ResponseUtil.StatusCode.*;

import java.util.Map;


@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;


    /**
     * 账号登录验证
     */
    @RequestMapping("/userLogin")
    public ResponseResult userLogin(@RequestBody User user){
        System.out.println("执行了userLogin方法。"+user);
        if (user==null|| user.getAccount()==null || user.getPassword()==null || user.getAccount().equals("") || user.getPassword().equals("")){
            return new ResponseResult(DATA_NOT_EXIST,"登录失败!账号或密码为空");
        }
        return userService.selectUserByAccountAndPassword(user);
    }


    /**
     *增加： 注册新账号
     */
    @RequestMapping("/userRegister")
    public ResponseResult userRegister(@RequestBody User user){
        System.out.println("执行了userRegister方法。"+user);
        //如果注册数据存在空值
        if (user==null|| user.getAccount()==null || user.getUsername()==null || user.getPassword() == null  || user.getRole() == null
                || user.getAccount().equals("") || user.getUsername().equals("") || user.getPassword().equals("") || user.getRole()==0){
            return new ResponseResult(DATA_NOT_EXIST, "注册失败,注册信息没有填写完整！");
        }
        if (user.getDept()==null || user.getDept().equals("")){
            user.setDept("无");
        }
        return  userService.insertUser(user);
    }



    /**
     * 通过某一个字段，进行查找。
     * 返回装有一个或多个对象的list集合。
     */
    @RequestMapping("/selectUserByArg")
    public ResponseResult selectUserByArg(@RequestBody Map<String,Object> map){
        System.out.println("执行了selectUserByArg方法！");
        if (map == null || map.size() == 0){
            return new ResponseResult(DATA_NOT_EXIST, "查询条件为空,请填写！");
        }

        //获取map中的查询条件和待匹配的值
        for (Map.Entry<String,Object> entry:map.entrySet()){
            if (entry.getKey()==null || entry.getKey().equals("") ||
                    entry.getValue()==null || entry.getValue().equals("")){
                return new ResponseResult(DATA_NOT_EXIST,"查询失败，查询条件为空！");
            }

            String key = entry.getKey();//获取key，即查询条件
            String  value1;  //用于存储 String类型的待匹配值
            Integer value2;  //用于存储 Integer类型的待匹配值

            //精确匹配id
            if ("uid".equals(key)){
                value2 = Integer.parseInt( (String) entry.getValue() ) ;
                System.out.println("查询条件：key="+key+"，\t值value="+value2);
                return userService.selectUserById(value2);
            }
            //模糊查询account
            else if ("account".equals(key)){
                value1 = (String) entry.getValue();
                System.out.println("查询条件：key="+key+"，\t值value="+value1);
                return userService.selectUserLikeAccount(value1);
            }
            //模糊查询username
            else if ("username".equals(key)){
                value1 = (String) entry.getValue();
                System.out.println("查询条件：key="+key+"，\t值value="+value1);
                return userService.selectUserLikeUsername(value1);
            }
            //模糊查询dept
            else if ("dept".equals(key)){
                value1 = (String) entry.getValue();
                System.out.println("查询条件：key="+key+"，\t值value="+value1);
                return userService.selectUserLikeDept(value1);
            }
            //精确查找role
            else if ("role".equals(key)){
                value2 = Integer.parseInt( (String) entry.getValue() ) ;
                System.out.println("查询条件：key="+key+"，\t值value="+value2);
                return userService.selectUserByRole(value2);
            }
            //精确查找role
            else if ("status".equals(key)){
                value2 = Integer.parseInt( (String) entry.getValue() ) ;
                System.out.println("查询条件：key="+key+"，\t值value="+value2);
                return userService.selectUserByStatus(value2);
            }
        }

        return new ResponseResult(DATA_NOT_EXIST,"查询失败，查询条件有误！");
    }



    /**
     * 修改：更新账号信息（除了账号id以外）
     */
    @RequestMapping("/updateUser")
    public ResponseResult updateUser(@RequestBody User user){
        System.out.println("执行了updateUser方法。"+user);
        return  userService.updateUserById(user);
    }



    /**
     * 物理删除：根据id删除对应账号.
     * 同时，疫苗接种记录进行逻辑删除：status=0，
     * 疫苗预约记录进行物理删除。
     */
    @RequestMapping("/deleteUserById/{uid}")
    public ResponseResult deleteUserById(@PathVariable("uid") Integer id){
        System.out.println("执行了deleteUserById方法。id="+id);
        return  userService.deleteUserById(id);
    }



    /**
     * 逻辑删除：根据id注销对应账号，status=0。
     * 疫苗接种记录不做修改，
     * 疫苗预约记录进行物理删除。
     */
    @RequestMapping("/closeUserById/{uid}")
    public ResponseResult closeUserById(@PathVariable("uid") Integer id){
        System.out.println("执行了closeUserById方法。id="+id);
        return  userService.closeUserById(id);
    }




    /**
     * 通过账号id查找用户
     */
    @RequestMapping("/selectUserById")
    public ResponseResult selectUserById(@RequestBody User user){
        System.out.println("执行了selectUserById方法。"+user);
        if (user==null|| user.getUid()==null|| user.getUid()==0 ){
            return new ResponseResult(DATA_NOT_EXIST, "账号id为空,请填写！");
        }
        return  userService.selectUserById(user.getUid());
    }


    /**
     * 通过账号查找用户
     */
    @RequestMapping("/selectUserByAccount")
    public ResponseResult selectUserByAccount(@RequestBody User user){
        System.out.println("执行了selectUserByAccount方法。"+user);
        if (user==null|| user.getAccount()==null|| user.getAccount().equals("") ){
            return new ResponseResult(DATA_NOT_EXIST, "账号内容为空,请填写！");
        }
        return  userService.selectUserByAccount(user.getAccount());
    }



    /**
     * 查询所有的账号信息
     */
    @RequestMapping("/selectAllUser")
    public ResponseResult selectAllUser(){
        System.out.println("执行了selectAllUser方法。");
        return userService.selectAllUser();
    }


}
